package com.unlp.javaclickers.docente.vistas;

import javax.swing.JFrame;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import java.awt.FlowLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;

import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

import com.unlp.javaclickers.modelo.Problema;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Map;

public class MostrarChartProfesor {

	private JFrame frame;
	private JFrame Main;
	private AtenderClientes t;
	private Problema problema;
	private Map<String, Integer> grafico;
	public Font fuente = new Font("Teen", Font.BOLD, 16);

	private static final Logger LOGGER = Logger
			.getLogger(MostrarChartProfesor.class);

	public MostrarChartProfesor() {
		initialize();
	}

	public MostrarChartProfesor(JFrame main, Map<String, Integer> grafico2,
			AtenderClientes hilo, Problema problema) {
		this.Main = main;
		this.grafico = grafico2;
		this.problema = problema;
		this.t = hilo;
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.getContentPane().setBackground(Color.WHITE);
		frame.setExtendedState(Frame.MAXIMIZED_BOTH);  
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(
				new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
		frame.setFont(fuente);

		JPanel panel = new JPanel();
		panel.setBackground(Color.WHITE);
		frame.getContentPane().add(panel);
		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

		JLabel lblicon = new JLabel("");
		lblicon.setIcon(new ImageIcon(getClass().getResource("logo.PNG")));
		panel.add(lblicon);

		JPanel panel_problema = new JPanel();
		panel_problema.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_problema);

		String titulo = "Resultados del Problema: "+problema.getNombre();
		titulo.concat(problema.getNombre());
		titulo.concat(problema.getPregunta().getEnunciado());
		JLabel lblproblema = new JLabel(titulo);
		lblproblema.setFont(new Font("Teen", Font.BOLD, 22));
		panel_problema.add(lblproblema);
		
		JPanel panel_pregunta= new JPanel();
		panel_pregunta.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_pregunta);

		String enunciado = "Enunciado problema: "+problema.getPregunta().getEnunciado();
		titulo.concat(problema.getNombre());
		titulo.concat(problema.getPregunta().getEnunciado());
		JLabel lblenunciado = new JLabel(enunciado);
		lblenunciado.setFont(new Font("Teen", Font.BOLD, 22));
		panel_pregunta.add(lblenunciado);
		
		JPanel panel_correcta = new JPanel();
		panel_correcta.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_correcta);

		String correcta = "Respuesta correcta: "+problema.getCorrecta().getNombre();
		titulo.concat(problema.getNombre());
		titulo.concat(problema.getPregunta().getEnunciado());
		JLabel lblcorrecta = new JLabel(correcta);
		lblcorrecta.setFont(new Font("Teen", Font.BOLD, 22));
		panel_correcta.add(lblcorrecta);
		

		JPanel panel_chart = new JPanel();
		frame.getContentPane().add(panel_chart);

		DefaultPieDataset data = new DefaultPieDataset();
		for (String s : grafico.keySet()) {
			data.setValue(s, grafico.get(s));
		}
		LOGGER.info(String.format("Datos: %s ", data));
		JFreeChart chart = ChartFactory.createPieChart3D("", data, false,
				false, false);
		ChartPanel chartpanel = new ChartPanel(chart, false);
		panel_chart.add(chartpanel); // probar

		JPanel panel_btnSiguiente = new JPanel();
		panel_btnSiguiente.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_btnSiguiente);

		JButton btnSiguiente = new JButton("Siguiente");
		btnSiguiente.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Main.setVisible(true);
				frame.setVisible(false);
				synchronized (t) {
					LOGGER.info(String
							.format("Se despierta al thread atenderClientes "));
					t.notify(); // una vez que se visualizo el grafico el
								// docente puede indicar que se continue con el
								// siguiente problema
				}
			}
		});
		btnSiguiente.setFont(fuente);
		panel_btnSiguiente.add(btnSiguiente);
	}

	public JFrame getFrame() {
		return frame;
	}

	public void setFrame(JFrame frame) {
		this.frame = frame;
	}

	public JFrame getMain() {
		return Main;
	}

	public void setMain(JFrame main) {
		Main = main;
	}

}
